package com.security.one_way_encry.base64;




import org.springframework.util.Base64Utils;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.IOException;

/**
 * @ClassName Base64TestByJava
 * @Description JDK自带的base64编码工具
 * @Detail
 *              特点：
 *                  1、BASE64的加密解密是双向的，可以得出明文和密文
 *                  2、相同的明文使用相同的Base64编码得到的密文都是一样的
 *              缺点：
 *                  1、由于相同的明文得到的都是相同的密文，所以base64编码很容易被暴力破解，很不安全
 * @Author MyPC
 * @Date 2020/9/23
 * @Version 1.0
 */
public class Base64TestByJava {
    public static void main(String[] args) throws Exception {
        // 编码两次
        String s = encryptBASE64("91300996@sz.gd.cp");
        s=encryptBASE64(s);
        System.out.println(s);
        // 解码两次
        String key = decryptBASE64(s);
        key=decryptBASE64(key);
        System.out.println(key);
    }

    /**
     * 编码
     * 注意： 字符串转成字节数组时要指定字符集
     * @param key
     * @return
     * @throws IOException
     */
    public static String encryptBASE64(String key) throws IOException {
        return new BASE64Encoder().encode(key.getBytes());
    }

    /**
     * 解码
     * 注意： 字节数组转成字符串时要指定字符集
     * @param code
     * @return
     * @throws IOException
     */
    public static String decryptBASE64(String code) throws IOException {
        byte[] bytes = new BASE64Decoder().decodeBuffer(code);
        return new String(bytes);
    }


}
